﻿CustomPlugin_Jpeg2pdf(){
	FileList:=gMenuZ.Data.files
	Sort, FileList
	jpeg2pdf = %A_ScriptDir%\Apps\jpeg2pdf.exe
	if !FileExist(jpeg2pdf) {
		MsgBox, 0, , 请在QZ中定义变量【jpeg2pdf】的路径
		return
	}
	MySel_FirstFile:=RegExReplace(FileList,"(.*)\r.*","$1")  ;取第一行
	FirstFileOutDir:=RegExReplace(MySel_FirstFile, "\\[^\\\r\n]+((\r\n.+)|$)") ;获取文件列表中第一个文件的父目录
	SplitPath,FirstFileOutDir,MyOutFileName
	WorkingDir:=FirstFileOutDir ;先假定工作目录为首个文件的父目录
	NewPdfName=%MyOutFileName%
	NewPdfFile=%FirstFileOutDir%\%NewPdfName%.pdf ;先假定 pdf 文件路径
	NewPdfFile:=CustomFunc_FileNameCheck(FirstFileOutDir,NewPdfName,"pdf") ;检查文件名
	FromDifferentDir:=false ;先假定文件并非来自不同路径
	FileArray:={}
	Loop, Parse, FileList, `n, `r
	{
		FileArray.Push(A_LoopField)
		if FromDifferentDir
			continue
		SplitPath, A_LoopField, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
		if OutDir!=%FirstFileOutDir%
		{
			FromDifferentDir:=True
			;msgbox 检测到图片有多个来源路径，新生成的 PDF 文件将被保存到桌面。
			NewPdfFile=%A_Desktop%\%NewPdfName%.pdf
			NewPdfFile:=CustomFunc_FileNameCheck(A_Desktop,NewPdfName,"pdf") ;检查文件名
			FileRemoveDir, %A_Temp%\Jpeg2Pdf_Temp, 1
			FileCreateDir, %A_Temp%\Jpeg2Pdf_Temp
			WorkingDir=%A_Temp%\Jpeg2Pdf_Temp
		}
	}
	if FromDifferentDir
	{
		FileListTemp=
		Loop, Parse, FileList, `n, `r
			FileCopy, %A_LoopField%, %A_Temp%\Jpeg2Pdf_Temp
		FileList=%A_Temp%\Jpeg2Pdf_Temp\*.jpg
	}
	else
		FileList :="""" RegExReplace(FileList, "\r\n", """ """) """"
	Command="%jpeg2pdf%" -r both -z fit -p auto -o "%NewPdfFile%" %FileList%
	RunWait, %Command%, %WorkingDir% ;该程序必须指定工作目录为图片所在目录否则无法工作。
	FileRemoveDir, %A_Temp%\Jpeg2Pdf_Temp, 1
	;msgbox 合并完成。
	MsgBox, 0, Title, 合并完成, 0.5
	return
}

CustomPlugin_PDFTK(){
	/* 脚本 : 合并所选PDF文件 
    脚本 : 合并所选PDF文件 
    作用：使用PDFTK Builder命令行工具命令PDF文件
    作者 : Kawvin（改自 卢霖）
    版本 : 0.1
    使用方法：
*/

;1、初始化	;{
	;PDFTK:=QZData("%PDFTK%") ;PDFTK 不支持中文路径，调用时请设法避免，指定的是PDFTK的命令行工具，是pdftk.exe，不是PDFTKBuilder.exe
	PDFTK = %A_ScriptDir%\Apps\PDFTKBuilderPortable\App\pdftkbuilder\pdftk.exe
	FileRemoveDir, %A_Temp%\PDFTK_Temp, 1
	FileCreateDir, %A_Temp%\PDFTK_Temp
;}

;2、生成要保存的PDF文件的名称，按住Ctrl则弹出输入窗口输入，否则以父文件夹名称为PDF名称	;{
	MySel:=QZData("files")
	FileList:=MySel
	Sort, FileList
	CombinedPdf:=""
	Loop,Parse,FileList,`n,`r
	{
		if (A_LoopField="")
			continue
		if (CombinedPdf=""){
			SplitPath,A_LoopField,,ParentDirPath
			SplitPath,ParentDirPath,,,,CombinedPdfName
		}
		;SplitPath, A_LoopField, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
		;FileCopy %A_LoopField%, %A_Temp%\PDFTK_Temp\%OutFileName% ;复制待处理的 pdf 文档到临时文件夹，避免因为中文名导致不能处理的情况
		OutFileName:="NowPDF" . substr("0000" . A_index,-4) . ".pdf"
		FileCopy %A_LoopField%, %A_Temp%\PDFTK_Temp\%OutFileName% ;复制待处理的 pdf 文档到临时文件夹，避免因为中文名及空格导致不能处理的情况
	}
	FileList=
	if GetKeyState("Ctrl"){
		InputBox,CombinedPdfName,请输入合并后的PDF文件名称,,,400,100
		if ErrorLevel
			CombinedPdfName:=CombinedPdfName
		if (MyTemInput="")
			CombinedPdfName:=CombinedPdfName
	}
	CombinedPdf:=CombinedPdfNameCheck(ParentDirPath,CombinedPdfName)
;}

;3、合并文件	;{
	RunWait "%PDFTK%" %A_Temp%\PDFTK_Temp\*.pdf cat output "%A_Temp%\PDFTK_Temp\Combined.pdf"
	FileMove %A_Temp%\PDFTK_Temp\Combined.pdf, %CombinedPdf%
	FileDelete, %A_Temp%\PDFTK_Temp\*.*
	FileRemoveDir, %A_Temp%\PDFTK_Temp, 1
	PostMessage,1075,540,0,,ahk_class TTOTAL_CMD
	return
;}
}
/* 函数: CombinedPdfNameCheck
    函数: CombinedPdfNameCheck
    作用: 检测指定目录下是否存在重名PDF文件，如果存在则加序号
    参数: ParentDirPath：目录，CombinedPdfName：文件名
    返回: 原文件名或加序号的文件名
    作者: 卢霖
    版本: 0.1
*/
CombinedPdfNameCheck(ParentDirPath,CombinedPdfName){
	CombinedPdf=%ParentDirPath%\%CombinedPdfName%.pdf
	IfExist, %CombinedPdf%
	{
		Loop
		{
			CombinedPdf=%ParentDirPath%\%CombinedPdfName%_(%A_Index%).pdf
			If !FileExist( CombinedPdf )
			{
				break
			}
		}
	}
	Return CombinedPdf
}